/**
 * 
 */
package jmine.tec.report;

import java.util.Collection;
import java.util.Map;

import jmine.tec.report.metadata.ParameterDefinition;

/**
 * DataColumn that curries some of the parameters
 * 
 * @author takeshi
 * @version 29/08/2007
 */
public interface CurriedDataColumn extends DataColumn, ColumnFactory {
    /**
     * Gets the name of the curried parameters
     * 
     * @return {@link Collection} of {@link String}
     */
    Collection<String> getCurriedParameterNames();

    /**
     * Gets all the parameter definitions that are curried in this {@link DataColumn}
     * 
     * @return {@link Collection} of {@link ParameterDefinition}
     */
    Collection<ParameterDefinition> getCurriedParameterDefinitions();

    /**
     * Fixes a parameter from this column. Throws {@link IllegalArgumentException} if the parameter cannot be found or if the value is
     * incompatible with the parameter type.
     * <p>
     * Note that <code>null</code> is allowed as a parameter value and will override parameters when executing
     * 
     * @param parameterName the paramter name
     * @param value the value to fix
     */
    void fixParameter(final String parameterName, final Object value);

    /**
     * Returns a {@link Map} with all curried parameters. Modifications on this {@link Map} should not reflect back on this
     * CurriedDataColumn.
     * 
     * @return {@link Map} of {@link String} to {@link Object}
     */
    Map<String, Object> getAllCurriedParameters();

}
